package com.example.day5;

/**
 * @author zjianfa
 */
public class LegalBrackets {

    /**
     * 参考视频题解 https://leetcode-cn.com/problems/valid-parentheses/solution/you-xiao-de-gua-hao-by-leetcode-solution/
     * @param s
     * @return
     */
    public static boolean isLegalBrackets(String s){
        // 将字符串转化为chat数组
        char[] c = s.toCharArray();

        Stack stack = new Stack();
        for (int i = 0; i < c.length; i++) {
            if (stack.isEmpty()){
                // 因为之前我们写的那个栈只能存整数，然后char类型内部编码其实就是0~128的整数，所以也可以存进去
                // 参考 https://baike.baidu.com/item/ASCII/309296?fromtitle=ascii%E7%A0%81%E8%A1%A8&fromid=19660475&fr=aladdin
                stack.push(c[i]);
                // 跳到下一次循环
                continue;
            }
            // 如果可以匹配，则将匹配到的栈顶元素出栈
            if (isMatche((char) stack.peek(), c[i])){
                stack.pop();
            }else {
                // 否则，继续入栈
                stack.push(c[i]);
            }
        }

        // 最终，如果栈里面还剩下元素，则说明没有完全匹配掉
        return stack.isEmpty();
    }

    /**
     * 判断括号匹配情况
     * @param left
     * @param right
     * @return
     */
    public static boolean isMatche(char left, char right){
        switch (left){
            case '(':
                return right == ')';
            case '[':
                return right == ']';
            case '{':
                return right == '}';
            default:
                return false;
        }
    }

}
